package org.TCC_NOVO.client.visual;

import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Function;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.MessageBox;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Tool;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.GridPanel;
import java.util.ArrayList;
import org.TCC_NOVO.client.GWTServiceAsync;
import org.TCC_NOVO.client.modelo.Unidade;

public class DisponibilizarOAPanel extends Panel{

    private final GWTServiceAsync controller;
    String IDF_Usuario;
    DisponibilizarOAPanel self;

    Store store;
    GridPanel grid;
    RecordDef recordDef;
    Toolbar toolbar;
    ArrayList<Unidade> ArrayUnidades = new ArrayList();

    public DisponibilizarOAPanel(GWTServiceAsync controller, String IDF_Usua) {
        this.controller = controller;
        this.IDF_Usuario = IDF_Usua;
        this.self = this;
        this.init();
    }

    private void init(){
        this.setBorder(true);
        this.setPaddings(2);

        recordDef = new RecordDef(new FieldDef[]{
            new IntegerFieldDef("ID"),
            new StringFieldDef("projeto"),
            new StringFieldDef("unidade"),
            new StringFieldDef("descricao"),
            new StringFieldDef("duracao"),
            new StringFieldDef("status"),
            new StringFieldDef("IDF_Projeto"),
        });

        store = new Store(recordDef);
        grid = new GridPanel();
        grid.setStore(store);

        ColumnConfig[] columns = new ColumnConfig[]{
            new ColumnConfig("Nome Projeto", "projeto", 160, true),
            new ColumnConfig("Nome Unidade", "unidade", 210, true),
            new ColumnConfig("Descrição", "descricao", 290, true),
            new ColumnConfig("Duração", "duracao", 100, true),
            new ColumnConfig("Status", "status", 120, true),            
        };

        ColumnModel columnModel = new ColumnModel(columns);
        grid.setColumnModel(columnModel);
        grid.setFrame(true);
        grid.setStripeRows(true);
        grid.setSize(1020, 565);
        grid.setAutoScroll(true);
        grid.setTitle("Unidades");
        grid.addTool(new Tool(Tool.REFRESH, new Function() {
            @Override
            public void execute() {
                grid.getEl().mask("Carregando", "x-mask-loading");
                CarrgarGrid();
                Timer timer = new Timer() {
                    @Override
                    public void run() {
                        grid.getEl().unmask();
                    }
                };
                timer.schedule(1000);
            }
        }, "Atualizar"));

        toolbar = getToolbar();
        toolbar.setSize(grid.getWidth(), 30);

        this.add(toolbar);
        this.add(grid);

        //carrega as informações para o grid...
        CarrgarGrid();

    }

    private class CallBackRetUnidades implements AsyncCallback<ArrayList<Unidade>> {
	public void onFailure(Throwable e) {
		MessageBox.alert("Erro ao carregar dados... ", e.getMessage());
	}
	public void onSuccess(ArrayList<Unidade> result) {
                CarregarDados(result);
        }
    }

    private void CarregarDados(ArrayList<Unidade> result){
        ArrayUnidades = result;
        for (int i = 0; i < result.size(); ++i) {
            addRecord(result.get(i));
        }
    }

    public void CarrgarGrid(){
        store.removeAll();
        String sSQL = "select A.ID, A.Nome, A.Descricao, A.IDF_Projeto, "+
                       "A.Status, A.Duracao, B.Nome NomeProj "+
                       "from Unidade A "+
                       "inner join Projeto B on B.ID = A.IDF_Projeto ";
        controller.RetornarDadosUnidadeConcluidas(sSQL, new CallBackRetUnidades());
    }

    public void addRecord(Unidade Unid){
        Object[] rowData = new Object[]{
          Unid.getId(),
          Unid.getNmProjeto(),
          Unid.getNome(),          
          Unid.getDescricao(),
          Unid.getDuracao(),
          Unid.getStatus(),
          Unid.getIdf_projeto(),
        };
        Record record = recordDef.createRecord(rowData[0].toString(), rowData);
        store.add(record);
    }

    public Toolbar getToolbar(){
        ToolbarButton btnEnviarArq = new ToolbarButton();
        btnEnviarArq.setText(" Disponibilizar Material");
        btnEnviarArq.setIcon("Images/upload.png");
        btnEnviarArq.setTooltip("Permite disponibilizar o material");
        btnEnviarArq.addListener(new ButtonListenerAdapter(){
            public void onClick(Button button, EventObject e){
                if (grid.getSelectionModel().getSelected() == null){
                    MessageBox.alert("Necessário Selecionar Algum Registro! ");
                }else{
                    DisponibilizarOAForm DispOAForm = new DisponibilizarOAForm(controller,
                                                                               grid.getSelectionModel().getSelected().getAsString("ID"),
                                                                               IDF_Usuario,
                                                                               grid.getSelectionModel().getSelected().getAsString("projeto").trim(),
                                                                               grid.getSelectionModel().getSelected().getAsString("unidade").trim(),
                                                                               self);
                    DispOAForm.show();
                }
            }
        });

        Toolbar toobar = new Toolbar();
        toobar.addButton(btnEnviarArq);

        return toobar;
    }
}
